package org.wm.controller; // 确保包路径正确

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.wm.response.ResponseResult; // 引入您自己的响应实体类

/**
 * 自定义错误处理器，专门处理 404 Not Found 等 Spring Boot 默认错误
 */
@RestController
public class CustomErrorController implements ErrorController {

    private static final String ERROR_PATH = "/error";

    @RequestMapping(ERROR_PATH)
    public ResponseResult<?> handleError(HttpServletRequest request) {
        // 从 request 中获取 HTTP 状态码
        Object status = request.getAttribute("jakarta.servlet.error.status_code");

        if (status != null) {
            Integer statusCode = Integer.valueOf(status.toString());

            // 【核心逻辑】判断是否为 404 错误
            if (statusCode == HttpStatus.NOT_FOUND.value()) {
                String requestUri = (String) request.getAttribute("jakarta.servlet.error.request_uri");
                String msg = String.format("请求的接口 [%s] 不存在，请检查路径是否正确！", requestUri);
                // 返回您自定义的、带有友好提示的 JSON 响应
                return ResponseResult.error(HttpStatus.NOT_FOUND.value(), msg);
            }
        }

        // 对于其他类型的 /error 请求（比如 500），返回一个通用的错误信息
        // 实际的 500 异常应该由 GlobalExceptionHandler 处理，这里只是一个兜底
        return ResponseResult.error("服务器内部错误，请联系管理员");
    }
}